var userDAO = require('../models/userDAO')
var formidable = require('formidable')
var jwt = require('jsonwebtoken')
var bcrypt = require('bcrypt')
var path = require('path')
var request = require('request')
var querystring = require('querystring')
var userController = {
    //查询用户信息
    getUsersDetail: function (req, res) {
        var tel = req.params.tel
        userDAO.msgCheck(tel, function (err, results) {
            if (err) {
                res.status(500).json({ data: '-1', msg: '用户信息查询失败！' })
            } else {
                res.json({ code: 200, data: results, msg: 'ok' })
            }
        })
    },
    //注册
    register: function (req, res) {
        var user = { psw: req.body.password, phone: req.body.tel }
            bcrypt.genSalt(10, function (err, salt) {
                bcrypt.hash(user.psw, salt, function (err, hash) {
                    //hash是加密的字符
                    user.psw = hash
                    userDAO.register(user, function (err, results) {
                        if (err) {
                            res.status(500).json({ data: '-1', msg: '数据库错误，注册失败' + err.message })
                        } else {
                            res.json({ code: 200, data: results, msg: '注册成功' })
                        }
                    })
                })
            })
        

    },
    //登录
    login: function (req, res) {
        var user = { phone: req.body.tel, psw: req.body.password }
        userDAO.login(user.phone, function (err, results) {
            if (err) {
                res.status(500).json({ data: -1, msg: '数据库错误，登录失败' })
            } else {
                if (results == null || results.length != 1) {
                    res.json({ code: 200, data: -1, msg: '手机号不存在，登录失败' })
                } else {
                    bcrypt.compare(user.psw, results[0].password, function (err, resPsw) {
                        if (resPsw) {
                            jwt.sign({ phone: user.phone }, 'privateKey', { expiresIn: 60 * 60*24*10 }, function (err, token) {
                                res.json({ code: 200, msg: '登录成功！！', token: 'Bearer ' + token })
                            })
                        } else {
                            res.json({ code: 200, data: -1, msg: '密码错误,登录失败---！' })
                        }
                    })
                }
            }
        })
    },
    // 短信发送
    getvCode: function (req, res) {
        var tel = req.query.tel
        var TextCode = ('000000' + Math.floor(Math.random() * 999999)).slice(-6);  //随机验证码
        let data = {
            "mobile": tel,  // 接受短信的用户手机号码
            "tpl_id": "186659",  // 您申请的短信模板ID，根据实际情况修改
            "tpl_value": "#code#=" + TextCode,  // 您设置的模板变量，根据实际情况修改
            "key": "c73e435693488a7272128c55786105a3"  // 应用APPKEY(应用详细页查询)
        }
        var queryData = querystring.stringify(data);
        var queryUrl = 'http://v.juhe.cn/sms/send?' + queryData;
        request(queryUrl, function (error, response, body) {
            if (error) throw error;
            if (!error && response.statusCode == 200) {
                console.log(body) // 打印接口返回内容
                var jsonObj = JSON.parse(body); // 解析接口返回的JSON内容
                console.log(jsonObj)
                if (jsonObj.result != null) {
                    let getcode = { tel: tel, code: TextCode }
                    res.json({ data: getcode, msg: 0 })
                } else {
                    res.json({ data: jsonObj.error_code, msg: -1 })
                }
            } else {
                console.log('请求异常')

            }
        })
    },
    //短信验证
    msgCheck: function (req, res) {
        var tel = req.query.tel
        userDAO.msgCheck(tel, function (err, results) {
            if (err) {
                res.status(500).json({ data: -1, msg: '数据库错误' })
            } else {
                if (results == null || results.length != 1) {
                    res.json({ code: 200, data: -1, msg: '手机号不存在，登录失败' })
                } else {
                    res.json({ code: 200, data: results, msg: 'ok' })
                }
            }
        })
    },
    //更改用户信息
    changeUserInfos: function (req, res) {
        var user = { userId: req.params.userId, userName: req.body.userName, phone: req.body.phone, address: req.body.address, sex: req.body.sex, Email: req.body.Email,birthday:req.body.birthday }
        console.log(user)
        userDAO.changeUserInfos(user, function (err, results) {
            if (err) {
                console.log(err)
                res.status(500).json({ data: -1, msg: '用户修改信息失败！' })
            } else {
                if (results.affectedRows == 0) {
                    res.json({ code: 200, data: -1, msg: '用户修改信息失败' })
                } else {
                    res.json({ code: 200, data: results, msg: 'ok' })
                }

            }
        })
    },
    // 更改密码
    changePsw: function (req, res) {
        var phone = req.params.phone
        var oldPsw = req.body.oldpass
        var newPsw = req.body.pass
        //查询输入的密码与原来密码是否匹配
        userDAO.getUsersDetail(phone, function (err, results) {
            if (err) {
                res.status(500).json({ data: -1, msg: '数据库错误，用户信息查询失败！' })
            } else {
                bcrypt.compare(oldPsw, results[0].password, function (err, resPsw) {
                    if (resPsw) {
                        bcrypt.genSalt(10, function (err, salt) {
                            bcrypt.hash(newPsw, salt, function (err, hash) {
                                //hash是加密的字符
                                newPsw = hash
                                var user = { phone, newPsw }
                                //修改密码
                                userDAO.changePsw(user, function (err, results) {//
                                    if (err) {
                                        res.status(500).json({ data: -1, msg: '数据库错误，更改密码失败' })
                                    } else {

                                        res.json({ code: 200, data: 1, msg: 'ok' })

                                    }
                                })
                            })
                        })
                    } else {
                        res.json({ code: 200, data: -1, msg: '密码错误,无法更改！' })
                    }
                })
            }
        })


    },
    //上传头像
    uploadPic: function (req, res) {
        var form = new formidable.IncomingForm()    //创建上传表单对象
        form.uploadDir = path.join(__dirname, '..', '/public/upload')         //设置上传文件的路径
        form.keepExtensions = true                  //设置保留上传文件的扩展名
        form.parse(req, function (err, fields, files) {
            if (err) {
                res.send('文件上传错误！')
            }
            console.log(files)
            //fields是上传的表单字段数组，files是上传的文件列表
            // console.log(files)
            //保存图片路径到数据库
            //1.获取当前用户编号
            var userId = fields.userId
            //2.获取当前用户的图片名称
            var headPic = path.parse(files.img_0.path).base
            userDAO.uploadPic({ headPic: headPic, userId: userId }, function (err, results) {
                if (err) {
                    res.json({ code: 500, msg: '上传文件失败！' })
                } else {
                    res.json({ code: 200, data: results, msg: '上传文件成功！' })
                }
            })
        })

    }

}
module.exports = userController